package prjtgl.bdd.comptes;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import org.hibernate.Query;
import prjtgl.bdd.HGeneral;
import prjtgl.metier.comptes.Membre;
import prjtgl.metier.comptes.profil_societe.Societe;
import prjtgl.metier.comptes.profil_utilisateur.poste.Experience;

/**
 * Gestion d'un membre
 * @author Lucie
 */
public class HMembre extends HGeneral {
	
	public Membre rechercherMembreParEmail(String email){
		session.beginTransaction();
		Query q = session.createQuery("from Membre as m where m.email='" + email + "'");
		Membre m = (Membre)q.uniqueResult();
		return m;
	}
	
	public List<Membre> rechercherMembreMultiCrit(String email, String nom, String prenom, String societe){
		session.beginTransaction();
		if(email == null){
			email = "0000";
		}
		if(nom == null){
			nom = "0000";
		}
		if(prenom == null){
			prenom = "0000";
		}
		if(societe == null){
			societe = "0000";
		}
		Query q = session.createQuery("select m from Membre as m left outer join m.experiences as e left outer join e.societe s where m.email ='" + email +"' or m.nom='" + nom + "' or m.prenom='" + prenom + "' or (e.enCours=true and s.nom='" + societe + "') group by m.email, m.motDePasse, m.id, m.role");
		//Query q = session.createQuery("from Experience as e inner join e.id_societe as s inner join e.id_membre as m where e.en_cours=true and (m.email ='" + email +"' or m.nom='" + nom + "' or m.prenom='" + prenom + "' or s.intitule='" + societe + "')");
		List<Membre> m = q.list();
		HashMap<Integer, ArrayList<Membre>> hm;
		hm = new HashMap();
		for(int i = -4; i < 1; i++){
			hm.put(i, new ArrayList());
		}
		for(Membre a : m){
			int note = -4;
			if(a.getNom().equals(nom))
				note++;
			if(a.getPrenom().equals(prenom))
				note++;
			if(a.getEmail().equals(email))
				note++;
			for(Experience e : a.getExperiences()){
				if(e.isEnCours() && e.getSociete().getNom().equals(societe))
					note++;
			}
			hm.get(note).add(a);
		}
		List<Membre> t = new ArrayList();
		for(int i = 0; i > -5; i--){
			for(Membre toto : hm.get(i)){
				t.add(toto);
			}
		}
		return t;
	}
	
	public Societe getSocieteCourante(Membre membre){
		session.beginTransaction();
		Query q = session.createQuery("select s from Membre as m left outer join m.experiences as e left outer join e.societe s where e.enCours=true and m.id="+membre.getId());
		Societe societe = (Societe) q.uniqueResult();
		if(societe != null)
			System.out.println("Societe : "+societe.getNom());
		return societe;
	}
	
	public long calculerCumulExperience(Membre membre){
		long cumul = 0;
		session.beginTransaction();
		Query q = session.createQuery("from Experience where id_membre = '" + membre.getId() + "'");
		List<Experience> exp = q.list();
		for(Experience e : exp){
			Date debut = e.getDateDebut();
			Date fin = e.getDateFin();
			if(fin == null || e.isEnCours()){
				fin = new Date();
			}
			long duree = fin.getTime() - debut.getTime();
			
			// Passage en jours
			duree = duree / 1000 / 60 / 60 / 24;
			cumul += duree;
		}
		
		// Passage en années
		cumul /= 365;
		
		return cumul;
	}
}
